/*
 * @Author: zlc
 * @Date: 2022-07-11 17:55:34
 * @LastEditTime: 2022-07-25 17:09:11
 * @LastEditors: zlc
 * @Description: 本地存储工具
 * @FilePath: \teachernotice\common\util\storage.js
 */
const config = {
    type: 'localStorage', // 本地存储类型 sessionStorage
    prefix: 'teacherclient_', // 名称前缀
    expire: 7 * 24 * 60 * 60 * 1000, //过期时间 单位：毫秒
    isEncrypt: false // 默认不加密 为了调试方便, 开发过程中可以不加密
}
// 名称前自动添加前缀
const autoAddPrefix = (key) => {
    const prefix = config.prefix ? config.prefix + '_' : '';
    return  prefix + key;
}
// 移除已添加的前缀
const autoRemovePrefix = (key) => {
    const len = config.prefix ? config.prefix.length+1 : '';
    return key.substr(len)
    // const prefix = config.prefix ? config.prefix + '_' : '';
    // return  prefix + key;
}
/**
 * @description: 设置本地存放
 * @param {*} key 存放的key
 * @param {*} value  存放的值
 * @param {*} expire 有效期
 * @return {*}
 */
export const setStorage = (key, value, expire = 0) => {
    if (value === '' || value === null || value === undefined) {
        value = null;
    }

    if (isNaN(expire) || expire < 0) throw new Error("Expire must be a number");

    expire = (expire ? expire : config.expire);
    let data = {
        value: value, // 存储值
        time: Date.now(), //存值时间戳
        expire: expire // 过期时间
    }
    
    const encryptString = config.isEncrypt ? encrypt(data): data;

    uni.setStorageSync(autoAddPrefix(key), encryptString);
}
// 获取 getStorage
export const getStorage = (key) => {
	if(!key) return
    key = autoAddPrefix(key);
    // key 不存在判断。。。。。
    
    // 优化 持续使用中续期
    const storage = config.isEncrypt 
    ? uni.getStorageSync(key)
    : uni.getStorageSync(key);
   
    let nowTime = Date.now();
    // 过期删除....
    if (storage.expire && config.expire < (nowTime - storage.time)) {
        uni.removeStorageSync(key);
        return null;
    } else {
        // 未过期期间被调用 则自动续期 进行保活
        uni.setStorageSync(autoRemovePrefix(key), storage.value)
        return storage.value;
    } 
}

